package com.shujia.wyh.day13.ketang;

/*
        假如我们在开发一个系统时需要对员工类进行设计，员工包含3个属性：姓名、工号以及工资。
        经理也是员工，除了含有员工的属性外，另为还有一个奖金属性。
        请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。

        分析：
            普通员工：
                属性：姓名，工号，工资
                行为：工作（敲代码）
            经理：
                属性：姓名，工号，工资，奖金
                行为：工作（做PPT）

       向上提取一个公共的抽象父类：员工类
            Staff:
                成员变量：name,id,salary
                成员方法：work();(抽象方法)
 */
abstract class Staff{
    private String name;
    private String id;
    private int salary;

    public Staff() {
    }

    public Staff(String name, String id, int salary) {
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    //抽象的工作方法
    public abstract void work();
}

class Employee extends Staff{

    public Employee() {
    }

    public Employee(String name, String id, int salary) {
        super(name, id, salary);
    }

    @Override
    public void work() {
        System.out.println("普通员工敲代码");
    }
}

class ProductManager extends Staff{
    private int bonus;


    public ProductManager() {
    }

    public ProductManager(String name, String id, int salary, int bonus) {
        super(name, id, salary);
        this.bonus = bonus;
    }

    @Override
    public void work() {
        System.out.println("经理做PPT");
    }
}


public class AbstractTest2 {
    public static void main(String[] args) {
        //使用抽象多态创建一个普通员工对象
        Staff s1 = new Employee("李毅","SJ001",12000);
        s1.work();

        //使用抽象多态创建一个经理对象
        Staff s2 = new ProductManager("xiaohu","SJ002",30000,200000);
        s2.work();

    }
}
